import { AccessTypeEnum } from '@/enums/accessTypeEnum';

/** 简单功能输出DTO */
export interface FunctionOutputDtoSimple {
  /** 编号 */
  Id: string | bigint;
  /** 功能名称 */
  Name: string;
  /** 区域名称 */
  Area: string;
  /** 控制器名称 */
  Controller: string;
  /** 访问类型 */
  AccessType: AccessTypeEnum;

  /** 数据版本 */
  DataVersion: string | bigint;
}

/** 功能输出DTO */
export interface FunctionOutputDto {
  /** 编号 */
  Id: string | bigint;
  /** 功能名称 */
  Name: string;
  /** 区域名称 */
  Area: string;
  /** 控制器名称 */
  Controller: string;
  /** 控制器的功能名称 */
  Action: string;
  /** 是否是控制器 */
  IsController: boolean;
  /** 是否Ajax功能 */
  IsAjax: boolean;
  /** 访问类型 */
  AccessType: AccessTypeEnum;
  /** 访问类型是否更改，如为true，刷新功能时将忽略功能类型 */
  IsAccessTypeChanged: boolean;
  /** 是否启用操作审计 */
  AuditOperationEnabled: boolean;
  /** 是否启用数据审计 */
  AuditEntityEnabled: boolean;
  /** 数据缓存时间（秒） */
  CacheExpirationSeconds: number;
  /** 是否相对过期时间，否则为绝对过期 */
  IsCacheSliding: boolean;
  /** 是否从库读取数据 */
  IsSlaveDatabase: boolean;
  /** 是否锁定 */
  IsLocked: boolean;

  /** 创建时间 */
  CreatedTime: Date;
  /** 更新时间 */
  UpdatedTime?: Date | null;
  /** 数据版本 */
  DataVersion: string | bigint;

  /** 是否可更新的数据权限状态 */
  Updatable: boolean;
  /** 是否可删除的数据权限状态 */
  Deletable: boolean;
}

/** 输入DTO：功能信息 */
export interface FunctionInputDto {
  /** 编号 */
  Id: string | bigint;
  /** 访问类型 */
  AccessType: AccessTypeEnum;
  /** 是否启用操作审计 */
  AuditOperationEnabled: boolean;
  /** 是否启用数据审计 */
  AuditEntityEnabled: boolean;
  /** 数据缓存时间（秒） */
  CacheExpirationSeconds: number;
  /** 是否相对过期时间，否则为绝对过期 */
  IsCacheSliding: boolean;
  /** 是否从库读取数据 */
  IsSlaveDatabase: boolean;
  /** 是否锁定 */
  IsLocked: boolean;

  /** 数据版本 */
  DataVersion: string | bigint;
}
